#include <iostream>
#include <string>
#include <vector>
#include <typeinfo>
#include <exception>
#include<list>
using namespace std;

class A
{
public:
    virtual void func()
    {
    }
protected:
    int _a1 = 1;
};
class B : public A
{
protected:
    int _b1 = 2;
};
int main()
{
    try
    {
        B* pb = new B;
        A* pa = (A*)pb;
        if (typeid(*pb) == typeid(B))
        {
            cout << "typeid(*pb) == typeid(B)" << endl;
        }
        // 如果 A 和  B不是继承关系，则会抛 bad_typeid异常
        if (typeid(*pa) == typeid(B))
        {
            cout << "typeid(*pa) == typeid(B)" << endl;
        }
        // 这⾥ pa 和 pb是 A* 和 B*，不是类类型对象，他会被当做编译是求值的静态类型运算

        // 所以这⾥始终是不相等的

            if (typeid(pa) == typeid(pb))
            {
                cout << "typeid(pa) == typeid(B)" << endl;
            }
    }
    catch (const std::exception& e)
    {
        cout << e.what() << endl;
    }

    return 0;
}

